Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Аналіз обчислювальної похибки при виконанні базових операцій алгоритмів цифрової обробки сигналів. Обчислення математичних виразів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Звіт
Предмет:
Проектування комп’ютерних засобів обробки сигналів та зображень

Частина тексту файла

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт лабораторної роботи № 1 з дисципліни: «Проектування комп’ютерних засобів обробки сигналів та зображень» на тему: «Аналіз обчислювальної похибки при виконанні базових операцій алгоритмів цифрової обробки сигналів. Обчислення математичних виразів» Мета роботи Дослідити шляхи виникнення обчислювальної похибки та її вплив на точність обчислень. Проаналізувати величину похибки при обчисленні деяких математичних виразів. Варіант завдання до лабораторної роботи Вар. Функція Формула розкладу Додаткові дані  39   x ( ]0., 10.[ (x = 0.37   Згідно поставленого завдання, аналітичний вид математичної функцій, що буде обчислюватися, буде мати вигляд( для наочності обчислень беремо 5 членів ряду):  Обчисливши коефіцієнти при степенях, отримаємо: =  Лістинг #include <math.h> #include <conio.h> #include <stdio.h> double fixed(double fin, int intRank, int rank, bool test);//ПРОТОТИП. //FIN-ВХІДНЕ ЧИСЛО RANK-РОЗРЯДНІСТЬ ПІСЛЯ КОМИ INTrANK-РОЗРЯДНІСТЬ ЦІЛОЇ ЧАСТИНИ TEST-ВИВІД [FIN_2] double fixed(double fin, int intRank, int rank, bool test = 0)//ФУНКЦІЯ ПЕРЕТВОРЕННЯ У ФІКСОВАНИЙ ФОРМАТ { //--IN BINARY------------------------------------------------------------------------------- double fix = 0;//НАША МАЙБУТНЯ ЗМІННА З ФІКСОВАНОЮ КОМОЮ int i;//ЛІЧИЛЬНИК-РІЗНОРОБОЧИЙ //--ЦІЛА ЧАСТИНА---------------------------------------------------------------------------- int r = 1;//ВАГА РОЗРЯДУ [1.0_2 = 1.0_10] int xp16[16];//ДЛЯ БІНАРНОГО КОДУ ЦІЛОЇ ЧАСТИНИ int fint = abs((int)fin);//БЕРЕМО ЛИШЕ ЦІЛУ ЧАСТИНУ for (i = 0; i<16; i++)//ОНУЛЕННЯ БІНАРНИХ РОЗРЯДІВ xp16[i] = 0; for (i = 0; fint>0, i<16; i++)//ПОКИ ЧИСЛО ДІЛИТЬСЯ НА 2 { xp16[i] = (int)(fint - ((int)(fint / 2)) * 2);//ОСТАЧА ВІД ДІЛЕННЯ НА 2 fint /= 2;//ЦІЛОЧИСЛОВЕ ДІЛЕННЯ НА 2 } for (i = 0; i<intRank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { fix = fix + xp16[i] * r;//ЗБИРАННЯ ЦІЛОЇ ЧАСТИНИ r *= 2;//ЗБІЛЬШЕННЯ ВАГИ РОЗРЯДУ } //--ДРОБОВА ЧАСТИНА------------------------------------------------------------------------ double d = 0.5;//СТЕПІНЬ ДЛЯ СКЛАДАННЯ ЧИСЛА [0.1_2=0.5_10] int px16[16];//БУДЕ ЗБЕРІГАТИ КОЖЕН РОЗРЯД БІНАРНОГО КОДУ ДРОБОВОЇ ЧАСТИНИ double fdot = fin;//КОПІЯ ВХІДНОГО ЧИСЛА for (i = 0; i<16; i++)//ОНУЛЕННЯ БІНАРНИХ РОЗРЯДІВ px16[i] = 0; if (fin<0)//ЧИСЛО ПО МОДУЛЮ fdot = -fin; for (i = 0; i<rank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { fdot = fdot - (int)fdot;//ВІДОКРЕМЛЕННЯ ЦІЛОЇ ЧАСТИНИ fdot *= 2;//МНОЖЕННЯ НА 2 px16[i] = (int)fdot;//ЗАПИС У БІНАРНИЙ КОД ЦІЛОЇ ЧАСТИНИ } for (i = 0; i<rank; i++)//ЗАЗНАЧЕНА РОЗРЯДНІСТЬ { if (px16[i] != 0) fix = fix + px16[i] * d; //ЗБИРАННЯ ЧИСЛА d *= 0.5;//СТЕПІНЬ ДВІЙКИ ПІСЛЯ КОМИ ЗБІЛЬШУЄТЬСЯ } if (test) { printf("\n%f = ", fix); if (fin<0) printf("[1."); else printf("[0."); for (i = intRank - 1; i >= 0; i--) printf("%d", xp16[i]); printf("."); for (i = 0; i<rank; i++) printf("%d", px16[i]); printf("]"); } if (fin<0)//ВСТАНОВЛЮЄМО ЗНАК fix = -fix; return fix;//ВЕРТАЄМО ФІКСОВАНИЙ ФОРМАТ } int main() { //------відкриття файлу-------------------- FILE* filePointer; char file_name[32] = "Resalts.txt"; filePointer = fopen(file_name, "wt"); // double s_abs8=0,s_abs16=0; // double max_abs8=0,max_abs16=0; printf("-------------------------------------------------------------------------------\n"); printf(" x | fe | f16 | f8 | %c 16 | %c 8 | %c 16 | %c 8\n" , (char)127, (char)127, (char)243, (char)243); printf("------+---------+------------------+---------+---------+--------+------+-------\n"); //------РОЗРАХУНОК Ф-Ї ЧЕРЕЗ DOUBLE--------- double x; bool zero = false; bool ones = false; for (x = 0; x<=10; x = x + 0.37) //прописуємо крок і межі { double f = 0; double _1 = 0.3333333333333333 * 0.33333333333333*pow(x, 3); double _2 = 0.2 * 0.333333333333333*pow(x, 5); double _3 = 0.1428571428571429 * 0.33...
Антиботан аватар за замовчуванням

14.12.2016 18:12

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини